package com.hw.saweb.services;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.annotation.SaMode;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * @program: sa-token-start
 * @description:
 * @author: hewei
 * @date: 2023-09-06 10:38
 * sa-token 默认开启基于SaInterceptor拦截器的 controller 层的注解权限校验。
 * 如果 其他业务层（例如services层）需要通过注解进行权限校验，需要引入 sa-token-spring-aop 依赖。
 * aop 与 SaInterceptor 拦截器模式不能同时集成，否则会在Controller层发生一个注解校验两次的bug，
 * 可以通过 SaInterceptor的isAnnotation(false) 方法来关闭拦截器默认的Controller层注解鉴权。
 **/

@Service
@SaCheckLogin
public class UserService {
    private static final HashMap<String, List<String>> userInfo = new HashMap<>();

    static {
        List<String> names = new ArrayList<>();
        names.add("何伟");
        names.add("马宁");
        names.add("马国萍");
        names.add("杨溢春");
        userInfo.put("names", names);
        List<String> addrs = new ArrayList<>();
        addrs.add("北京");
        addrs.add("上海");
        addrs.add("广州");
        addrs.add("宁夏");
        userInfo.put("addrs", addrs);

    }

    @SaCheckPermission(value={"user.get","user.delete"},mode = SaMode.AND,orRole = {"root,custome"})
    public List<String> getNames() {
        return userInfo.get("names");
    }
    @SaCheckRole(value={"root,custome"},mode = SaMode.OR)
    public List<String> getAddrs() {
        return userInfo.get("addrs");
    }

}
